using System;
using System.Collections.Generic;
using System.Text;

namespace CodePlex.Resourceful
{

    public class Tuple<T1>
    {
        public static readonly Tuple<T1> Empty = new Tuple<T1>(default(T1));

        private readonly T1 _value1;

        public Tuple(T1 value1)
        {
            _value1 = value1;
        }

        public T1 Value1
        {
            get
            {
                return _value1;
            }
        }

    }



    public class Tuple<T1,T2> : Tuple<T1>
    {
        new public static readonly Tuple<T1, T2> Empty = new Tuple<T1, T2>(default(T1), default(T2));

        private readonly T2 _value2;

        public Tuple(T1 value1, T2 value2)
            :base(value1)
        {
            _value2 = value2;
        }

        public T2 Value2
        {
            get
            {
                return _value2;
            }
        }

    }

    public class Tuple<T1, T2, T3> : Tuple<T1,T2>
    {

        new public static readonly Tuple<T1, T2, T3> Empty = new Tuple<T1, T2, T3>(default(T1), default(T2), default(T3));

        private readonly T3 _value3;

        public Tuple(T1 value1, T2 value2, T3 value3)
            : base(value1,value2)
        {

            _value3 = value3;
        }



        public T3 Value3
        {
            get
            {
                return _value3;
            }
        }


    }
}
